package com.hoe.tsb.block;

import com.hoe.tsb.mmk.TraceData;

import java.util.List;

/**
 * <p>
 * 区块链客户端
 * </p>
 *
 * @author hoe
 * @version 1.0
 * @date 2022/12/3
 */
public interface BlockChain extends BlockChainApi {

    /**
     * 区块链的版本
     */
    String VERSION = "0.01";

    /**
     * 每次生成并存储区块时都需要把最新的区块Hash存储到该Key值下
     */
    String LATEST_BLOCK_HASH_KEY = "LATEST_BLOCK_HASH_KEY";

    /**
     * 生成区块<br/>
     * 从TraceData缓存池中取数据生成区块<br/>
     * 生成区块后需要保存到区块链中，并且向所有的Follower同步区块
     * @param dataList 待写入区块的数据
     * @return 生成的区块
     */
    Block gen(List<TraceData> dataList);

    /**
     * 生成区块或者收到Leader的同步区块数据后写入到区块链中
     * @param block 待写入的区块数据
     */
    void saveBlock(Block block);

}
